/**
 * 系统全局配置、公用函数
 */
var wp = {};

//是否调试模式,此处仅定义并初始化,最终由后台赋值
wp.debug = true;

wp.config = {};
wp.state = {};
wp.icon = {};
wp.msg = {};
wp.component = {};

/**
 * **********************
 * 1. 属性配置区域
 * **********************
 */
//分页大小
wp.config.pageSize = 20;
//分页列表
wp.config.pageList = [20,50,100];
//layer弹出窗模式
wp.config.layerMode = 1;
//当前用户
wp.config.user = {};
//当前操作模块ID
wp.config.moduleID = '';
//当前操作模块编号
wp.config.moduleCode = '';
//当前操作模块名称
wp.config.moduleName = '';
//当前操作子系统ID
wp.config.subSysId = '';
//树根节点
wp.config.treeRoot = 'ROOT';

//layer提示框图标
wp.icon.info = 0; //信息
wp.icon.ok = 1;   //正常 
wp.icon.error = 2;//错误 X
wp.icon.ask = 3;  //询问
wp.icon.failure = 5;//失败 笑脸
wp.icon.success = 6;//成功 失败脸
wp.icon.loading = 2;//加载中  16-白色
//layer提示时长
wp.msg.keeplive = 1500;

// 状态码

// 正常状态码
wp.state.successCode = "000000";
// 系统异常状态码
wp.state.errorCode = "999999";
// 未登录
wp.state.noLoginCode = "999998";
// TOKEN无效
wp.state.tokenInvalidCode = "999997";
// 重复登录
wp.state.repeatLoginCode = "999996";
// 逻辑默认失败状态码
wp.state.failureCode = "999995";


/**
 * **********************
 * 2. 函数定义区域
 * **********************
 */

/**
 * /解析表格数据
 * @param res
 */
wp.parseGridData = function(res){ //res 即为原始返回的数据
    if(res.dataBody == null){
        return {
            code:"000000",
            count:0,
            data:[]
        }
    }

    return {
        "code": res.code, //解析接口状态
        "msg": res.message, //解析提示文本
        "count": res.dataBody.total, //解析数据长度
        "data": res.dataBody.list //解析数据列表
    };
}

// 获取ajax公共请求头
wp.getAjaxHeaders = function(){
    var headers = {
        'wp-token':wp.getToken()
    };
    return headers;
};

// url包装
wp.url = function(url){
  return wp.project.serverContextPath + url;
};

// 资源url包装
wp.resUrl = function(url){
    return wp.project.resourceContextPath + url;
};

/**
 * 提交表单
 */
wp.submit = function(config){
	config.form.ajaxSubmit({
		url:config.url,
		data:config.data || {},
		dataType   : "json",
		success    : function(data){
			config.onSuccess(data);
		}
	}); 
};

/**
 * 单击事件冒泡禁止设置
 */
wp.stoppropagation = function(event){
	//禁用事件冒泡，防止调用body.click 
	event.stoppropagation();
	event.cancelBubble = true;
}

/**
 * 包装路径
 */
wp.newUrl = function(url){
	if(wp.Debug){
		return url + '?_=' + new Date().getTime();
	}
	return url;
};

/**
 * 文件下载
 */
wp.down = function(down){
	// 提交表单，下载文件
    var form = $('<form></form>');  
    form.attr('action', down.url);  
    form.attr('method', 'post');  
    
    var params = down.params || {};
    for(var key in params){
    	var input = $('<input type="text" name="'+ key +'" value="'+ params[key] +'" />');  
    	form.append(input);  
    }
    $("body").append(form);
    // 提交表单  
    form.submit();
    // 移除表单
    form.remove();
}

/**
 * 列表是否选择了数据
 * @param gridObj
 */
wp.isSelect = function(gridObj){
	var rows = gridObj.getSelectedRows();
	if(rows.length > 0){
		return rows;
	}else{
		layer.alert('请选择数据进行操作',{icon:wp.icon.info});
	}
	return false;
}

/**
 * 列表是否选择了一条数据
 * @param gridObj
 */
wp.isSelectOne = function(gridObj){
	var rows = gridObj.getSelectedRows();
	if(rows.length == 1){
		return rows[0];
	}else{
		layer.alert('请选择一条数据进行操作',{icon:wp.icon.info});
	}
	return false;
}

/**
 * buildJsonValue
 */
wp.buildJsonValue = function(rows,key){
    var dataKey = key ? key : "id";
	var jsonStr = '['
	for(var i = 0;i<rows.length;i++){
		if(i > 0)jsonStr += ',';
		jsonStr += '{"'+ dataKey +'":"' + rows[i][dataKey] + '"}';
	}	
	jsonStr += ']';
	return jsonStr;
}

// 国际化语言信息存储
wp.storeLanguage = function(value){
    //value = value.replace('-','_');
    localStorage.setItem('ewallet-language',value);
};

/**
 * 获取格式为 zh_CN,en_US
 */
wp.getLanguage = function(){
    var i18n = localStorage.getItem('ewallet-language');

    // 未设置情况系取浏览器语言信息
    //var i18n;
    if(!i18n){
        var type = navigator.appName;
        if (type == "Netscape"){
            i18n = navigator.language;//获取浏览器配置语言，支持非IE浏览器
        }else{
            i18n = navigator.userLanguage;//获取浏览器配置语言，支持IE5+ == navigator.systemLanguage
        };
        //i18n = i18n.substr(0, 2).toLowerCase(); //获取浏览器配置语言前两位
    }
    i18n = i18n.replace('-','_');  // 替换为下划线
    return i18n;
};

// 获取传递到后端的语言编码格式
wp.getLanguageAsParam = function(){
    return wp.getLanguage().replace('_','-');
};

// 国际化初始化
wp.i18n = function(lang){
    if(!lang){
        lang = wp.getLanguage();
    }
    return new VueI18n({
        //定义默认语言
        locale: lang ? lang : 'zh_CN',
        messages: wp.config.i18n
    });
};

// 网络请求
wp.httpExecute = function(target){
    var storeUserName = wp.getValue('ewallet-username');
    var defaultHeaders = {
        'username':storeUserName ? JSON.parse(storeUserName)[0]:'',
        'uuid':wp.getValue('ewallet-uuid'),
        'wp-token':wp.getToken()
    };
    if(target.headers){
        $.extend(defaultHeaders,target.headers);
    }
    target.headers = defaultHeaders;

    $.ajax(target.url,{
        data:target.data,
        //contentType:"application/json",
        async:target.async == undefined ? true : target.async,
        dataType:target.dataType ? target.dataType : 'json',//服务器返回数据格式，默认json
        type:target.type,//HTTP请求类型
        timeout:10000,//超时时间设置为10秒；
        headers:target.headers,
        success:function(data){
            var suc = target.success;
            var failure = target.failure;
            var lang = wp.getLanguage();

            // 正常
            if(data.code == wp.state.successCode){
                wp.closeLoading();
                if(suc){
                    suc(data);
                }
                return;
            }

            // 系统异常
            if(data.code == wp.state.errorCode){
                // 进度条全局关闭
                wp.closeLoading();
                layer.msg("服务器异常");
                return;
            }

            // 未登录
            if(data.code == wp.state.noLoginCode){
                layer.msg("身份认证错误，请重新登录");
                setTimeout(function(){
                    wp.removeToken();
                    wp.removeUser();
                    window.top.location.href = '/login.html';
                }, 2000);
            }

            // token无效
            if(data.code == wp.state.tokenInvalidCode){
                layer.msg("请重新登录");
                setTimeout(function(){
                    wp.removeToken();
                    wp.removeUser();
                    window.top.location.href = '/login.html';
                }, 2000);
            }

            // 重复登录
            if(data.code == wp.state.repeatLoginCode){
                layer.msg("当前账号在其他设备上登录，此客户端已退出登录");
                setTimeout(function(){
                    wp.removeToken();
                    wp.removeUser();
                    window.top.location.href = '/login.html';
                }, 2000);
                return;
            }

            // 其他逻辑失败状态自行处理
            if(failure){
                wp.closeLoading();
                failure(data);
            }
        },
        error : function(xhr,type,errorThrown){
            var lang = wp.getLanguage();
            wp.closeLoading();
            // 超时
            if(type == 'timeout'){
                //layer.alert(wp.config.i18n[lang].connect_timeout);
                layer.msg("连接超时,请稍后再试");
                return;
            }

            if(target.error){
                target.error(xhr,type,errorThrown);
                return;
            }

            layer.msg("服务器异常");
        }
    });
};

/**
 *
 * RequestConfig:{
	 * 		url:'',
	 * 		dataType:'',
	 * 		data:'',
	 * 		success:''
	 * }
 *
 */
wp.httpGet= function(requestConfig){
    var target = {
        data:{},
        dataType:requestConfig.dataType,
        type:'get',
        success:requestConfig.success
    };
    // 合并
    $.extend(target,requestConfig);
    wp.httpExecute(target);
};

/**
 *
 * RequestConfig:{
	 * 		url:'',
	 * 		dataType:'',
	 * 		data:'',
	 * 		success:''
	 * }
 *
 */
wp.httpPut = function(requestConfig){
    var target = {
        data:requestConfig.data,
        dataType:requestConfig.dataType,
        type:'put',
        success:requestConfig.success
    };
    // 合并
    $.extend(target,requestConfig);
    wp.httpExecute(target);
};

/**
 *
 * RequestConfig:{
	 * 		url:'',
	 * 		dataType:'',
	 * 		data:'',
	 * 		success:''
	 * }
 *
 */
wp.httpPost = function(requestConfig){
    var target = {
        data:requestConfig.data,
        dataType:requestConfig.dataType,
        type:'post',
        success:requestConfig.success
    };
    $.extend(target,requestConfig);
    wp.httpExecute(target);
};

// Token值设置获取
wp.storeToken = function(value){
    localStorage.setItem('ewallet-token', value);
};

wp.getToken = function(){
     var token = localStorage.getItem('ewallet-token');
     if(!token || token == "null") return "";
    return token;
};

wp.removeToken = function(){
    localStorage.removeItem('ewallet-token');
};

// 刷新Token值设置获取
wp.storeRefreshToken = function(value){
    localStorage.setItem('ewallet-refresh-token', value);
};

wp.getRefreshToken = function(){
    return localStorage.getItem('ewallet-refresh-token');
};

wp.removeRefreshToken = function(){
    localStorage.removeItem('ewallet-refresh-token');
};

// 用户对象设置获取
wp.storeUser = function(value){
    localStorage.setItem('ewallet-user', JSON.stringify(value));
}

wp.getUser = function(){
    var userStr = localStorage.getItem('ewallet-user');
    return JSON.parse(userStr);
}

wp.removeUser = function(){
    localStorage.removeItem('ewallet-user');
}

// 常规值设置
wp.storeValue = function(key,value){
    localStorage.setItem(key,value);
};

wp.getValue = function(key){
    return localStorage.getItem(key);
};

wp.removeValue = function(key){
    return localStorage.removeItem(key);
};

wp.loading = function(title,showTitle){
    var show = showTitle ? title :"";
    var index = layer.load(2);
    /*var index = layer.msg("",{
        icon: 16,
        shade: 0.01,
        time: 0
        //skin: 'wp-loading'
    });*/
    return index;
};

wp.closeLoading = function(index){
    if(index){
        layer.close(index);
    }else{
        layer.closeAll('loading');
    }
};

// 获取iframe窗口
wp.getWindow = function(layero){
    var title = layero.find('iframe')[0]['name'];
    var iframeWindow = window[layero.find('iframe')[0]['name']];
    return iframeWindow;
};

// 添加到新TAB
wp.addTab = function (url,title){
    var layuimini = window.top.layuimini;
    var tabId = url + "?" + new Date().getTime();
    layuimini.addTab(tabId,url,title,true);
    layuimini.changeTab(tabId);
    var iframeWindow = window.top.document.getElementsByName(tabId)[0].contentWindow;
    iframeWindow.tabId = tabId;
    return iframeWindow;
}

// 关闭TAB
wp.closeTab = function (tabId){
    var layuimini = window.top.layuimini;
    layuimini.delTab(tabId);
    layuimini.tabRoll();
}



/**按照指定格式格式化时间
 * @param {Object} date
 * @param {Object} fmt
 */
wp.formatDate = function(date, fmt) {
    var time = new Date(parseInt(date.getTime()));
    var o = {
        "M+": time.getMonth() + 1, // 月份
        "d+": time.getDate(), // 日
        "h+": time.getHours(), // 小时
        "m+": time.getMinutes(), // 分
        "s+": time.getSeconds(), // 秒
        "q+": Math.floor((time.getMonth() + 3) / 3), // 季度
        "S" : time // 毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;

};

wp.formatDateStr = function(datStr,fmt){
    var str = datStr.substr(0,datStr.lastIndexOf(".")).replace(/-/g,"/").replace("T"," ");
    return wp.formatDate(new Date(str), fmt);
};

// 加载后执行
// $(function(){
// 	// 全局ajax设置,主要用户数据表格等封装插件，不直接调用wp.http系列方法时使用
//     $.ajaxSetup({
//         timeout:10000,//超时时间设置为10秒；
//         headers:{
//             'wp-token':wp.getToken()
//         },
//         success:function(data){
//             var suc = target.success;
//             var failure = target.failure;
//             var lang = wp.getLanguage();
//
//             // 正常
//             if(data.code == wp.state.successCode){
//                 if(suc){
//                     suc(data);
//                 }
//                 return;
//             }
//
//             // 系统异常
//             if(data.code == wp.state.errorCode){
//                 //mui.hideLoading();//隐藏后的回调函数
//                 //wp.closeLoading(wp.waiting); // 全局关闭
//                 layer.alert(wp.config.i18n[lang].bad_network);
//                 return;
//             }
//
//             // 未登录
//             if(data.code == wp.state.noLoginCode){
//                 //mui.hideLoading();//隐藏后的回调函数
//                 //mui.toast("未登录");
//
//                 var current = plus.webview.getTopWebview();
//                 // 当前已在登录界面直接返回
//                 if(current.id == 'login'){
//                     return;
//                 }
//
//                 mui.toast(wp.config.i18n[lang].authentication_error);
//                 setTimeout(function(){
//                     wp.removeToken();
//                     wp.removeUser();
//                     // mui.fire(plus.webview.getLaunchWebview(),'login');
//                     plus.runtime.restart();
//                 }, 2000);
//             }
//
//             // 重复登录
//             if(data.code == wp.state.repeatLoginCode){
//                 var current = plus.webview.getTopWebview();
//                 // 当前已在登录界面直接返回
//                 if(current.id == 'login'){
//                     return;
//                 }
//                 mui.toast(wp.config.i18n[lang].account_kicked_out);
//                 setTimeout(function(){
//                     wp.removeToken();
//                     wp.removeUser();
//                     // mui.fire(plus.webview.getLaunchWebview(),'login');
//                     plus.runtime.restart();
//                 }, 2000);
//                 return;
//             }
//
//             // 其他逻辑失败状态自行处理
//             if(failure){
//                 failure(data);
//             }
//         },
//         error : function(xhr,type,errorThrown){
//             var lang = wp.getLanguage();
//             //mui.hideLoading();//隐藏后的回调函数
//             // 超时
//             if(type == 'timeout'){
//                 layer.alert(wp.config.i18n[lang].connect_timeout);
//                 return;
//             }
//
//             //mui.hideLoading();//隐藏后的回调函数
//             layer.alert(wp.config.i18n[lang].bad_network);
//         }
//     });
// });